package br.ufrj.dcc.versionspaces;

import java.util.List;

import br.ufrj.dcc.AbstractLearningProblem;

/**
 * Classes that implement this interface are treated
 * as an implementation of a Version Spaces algorithm.
 * So the output will be a reticulated with nodes representing
 * all the possible combinations of G and S 
 * (General and Specifical hypothesis set).
 * Given a test example, counting the amount of positive classifications
 * of an element against the negative classifications gives his class.
 * @author Pedro Rougemont
 *
 */
public interface AbstractVersionSpaces extends AbstractLearningProblem {
	
	/**
	  * Responsible for the execution of the especific
	  * implementation of a version spaces algorithym.
	  * Returns an array with 2 positions, the first position 
	  * holding the General hypothesis from the last iteration 
	  * of the algorithm & the second position holding
	  * a single Specific hypothesis (except if this is an empty case).
	  * The hipothesis have the following pattern:
	  * [element1, ?, element3, ? , ? ..]
	  * Where ? represents a generalization.
	  * The reticulated will be derived from S and G.
	  * @return string representation of the version spaces
	  */
	public List<String[]>[] buildVersionSpace();
	
}
